import java.math.BigDecimal;
import java.util.Random;

/**
 * 介绍Java的算术工具类：Math BigDecimal
 */
public class Demo08 {

    public static void main(String[] args) {
        /*
            Math工具类，在java.lang包下的，提供的方法：
                Math.abs(a) 取绝对值
                Math.sqrt(4) 开方，取平方根
                Math.floor(b) 向下取整
                Math.ceil(b) 向上取整

                Math.random() 生成 0-1之间的随机数
         */
        int a = -10;
        double b = 10.2;
        System.out.println(Math.abs(a));
        System.out.println(Math.sqrt(4));
        System.out.println(Math.floor(b));
        System.out.println(Math.ceil(b));

        System.out.println(Math.random());

        /*
            思考：如何生成一个四位数的验证码？
                方式有两种：生成4个数，生成1000-10000之间的数
         */

        int num = (int) (Math.random()*10);
        System.out.println(num);

        int temp = (int) (Math.random()*9000) + 1000;
        System.out.println(temp);


        Random random = new Random();
        //自动生成0-9 范围内的随机数
        int num1 = random.nextInt(10);
        System.out.println(num1);

        //0 - 9999
        random.nextInt(10000);

        // 0 - 8999 + 1000 -> 1000 - 9999
        int res = random.nextInt(9000)+1000;


        /*
            BigDecimal 工具类实现算术运算，提供的方法：
                add() 加 BigDecimal类型的
                divide() 除
                multiply() 乘
                subtract() 减
                xxxValue() 将BidDecimal中的值转换成对应的基本数据类型
         */

        BigDecimal numb1 = new BigDecimal(10);
        BigDecimal numb2 = new BigDecimal(20);
        BigDecimal resb = numb1.add(numb2);

        BigDecimal resBd = numb1.divide(numb2).setScale(2);
        int resi = resb.intValue();

        numb1.multiply(numb2);

        numb1.subtract(numb2);

        System.out.println(resi);
        System.out.println(resBd.doubleValue());

        /*
            控制算术运算，结果的展示：
                1.使用算术运算符，+ - * / 会造成一定的误差，小数位很多，得到的结果使用Math工具进行四舍五入
                  Math.floor(res) 向下取整
                  Math.ceil(res) 向上取整
                  Math.round(res) 四舍五入
                2.使用BigDecimal 做运算
         */
        double numb = 0.3;
        double numc = 6;

        BigDecimal numd = new BigDecimal(0.8);
        BigDecimal nume = new BigDecimal(0.4);
        BigDecimal numf = new BigDecimal(5);

        BigDecimal resg = numd.multiply(nume).multiply(numf);
        BigDecimal resh = resg.setScale(2,BigDecimal.ROUND_HALF_DOWN);

        BigDecimal resk = numf.divide(nume,2,BigDecimal.ROUND_HALF_DOWN);
        System.out.println(resh.toString());
        System.out.println(resk.toString());
    }
}
